package ar.com.larreta.vista.client;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.form.Field;

public class Ventana extends Window implements ABM{
	
	protected BarraHerramientas barraHerramientas;
	
	protected Estado estado = new Creacion();
	protected Collection<Field> campos = new ArrayList<Field>();
	protected Collection<Field> camposNoModificables = new ArrayList<Field>();
	
	public Ventana(String encabezado, String toolTipVentana) {
		super();
		setSize(getAnchoVentana(), getLargoVentana());
		setHeading(encabezado);
		if ((toolTipVentana!=null) && (!"".equalsIgnoreCase(toolTipVentana))){
			setTitle(toolTipVentana);
		}
	}

	public Estado getEstado() {
		return estado;
	}
	
	public void cambiarEstadoAModificacion(){
		estado = new Modificacion();
		cambioDeEstado();
		cambiarEstadoCamposNoModificables(Boolean.FALSE);
	}
	
	public void cambiarEstadoACreacion(){
		estado = new Creacion();
		cambioDeEstado();
		cambiarEstadoCamposNoModificables(Boolean.TRUE);
	}
	
	public void cambioDeEstado(){
		barraHerramientas.cambiarEstado(estado);
	}

	public Integer getAnchoVentana(){
		return Constantes.ANCHO_VENTANA_POR_DEFECTO;
	}
	
	public Integer getLargoVentana(){
		return Constantes.LARGO_VENTANA_POR_DEFECTO;
	}

	/**
	 * Valida que todos los campos a validar sean validos
	 * @return
	 */
	protected Boolean esValido() {
		Boolean valid = Boolean.TRUE;
		Iterator it = campos.iterator();
		while (it.hasNext()) {
			Field field = (Field) it.next();
			if (!field.isValid()) {
				valid = Boolean.FALSE;
			}
		}
		return valid;
	}
	
	/**
	 * Registra el campo 
	 * @param field
	 */
	protected void registrarCampo(Field field){
		if (field != null) {
			campos.add(field);
		}
	}
	
	/**
	 * Registra el campo como no modificable
	 * @param field
	 */
	protected void registrarComoNoModificable(Field field){
		if (field != null) {
			camposNoModificables.add(field);
		}
	}
	
	public void cambiarEstadoCamposNoModificables(Boolean estado){
		Iterator it = camposNoModificables.iterator();
		while (it.hasNext()) {
			Field field = (Field) it.next();
			field.setEnabled(estado);
		}
	}
	
	public void limpiar(){
		Iterator it = campos.iterator();
		while (it.hasNext()) {
			Field field = (Field) it.next();
			field.clear();
		}
	}
	
	public void cancelando(){
		cambiarEstadoACreacion();
		limpiar();
	}

	public void confirmando(){}

}
